wslave 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0e305b19a2bfd156892a47a2c013a2082dabf62
4
- data.tar.gz: 661229121b7a5c35dffd76f5cc48312435a43755
3
+ metadata.gz: 7df0f722ba78348871b0a8e1ff5b7ce0f6c708f5
4
+ data.tar.gz: 13522f3886ca1bb4ee0da327b0b1585308f5f83b
5
5
  SHA512:
6
- metadata.gz: f378423b69084cfc3ecf4e0f4c5d95e43bb1e891e30fbf80882314b245b64602a097e5ba49da7cf93a7343530fd50e31a235d7060be80dcea3a9f5f417f7707a
7
- data.tar.gz: 74e52b91dceba192e31570dc4eb36702bec6815850afc0266947fbe1a20214a8a3db631363189e59b47419dedf734204af68f33a88c4eb3f4e50b2bc96de35d9
6
+ metadata.gz: a82e995669f06f918842f1669bd52f203c075ab822e77915a0f31622d750072272c077346b996b8907e99442ab7db8631559383b3b66080ba43359c8095f4feb
7
+ data.tar.gz: 90120ae043b34d6118afb8d3f4ebf31658816a270ab44bd394cb023c19b3999cbb582b5308e7cfdb9ceb41240965e7a2ccb90dc8ba82f104ecd2654d280c6a58
data/base/Capfile ADDED
@@ -0,0 +1,10 @@
1
+ require "capistrano/setup"
2
+
3
+ require "capistrano/deploy"
4
+
5
+ require "capistrano/scm/git"
6
+ install_plugin Capistrano::SCM::Git
7
+ require "capistrano/scm/git-with-submodules"
8
+ install_plugin Capistrano::SCM::Git::WithSubmodules
9
+
10
+ Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
data/base/Dockerfile ADDED
@@ -0,0 +1,18 @@
1
+ FROM php:5.6-apache
2
+
3
+ RUN a2enmod rewrite
4
+ RUN service apache2 restart
5
+ RUN apt-get update \
6
+ && apt-get install -y libpng12-dev libjpeg-dev mysql-client \
7
+ && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
8
+ && docker-php-ext-install gd \
9
+ && docker-php-ext-install mbstring \
10
+ && docker-php-ext-install mysql \
11
+ && docker-php-ext-install mysqli \
12
+ && docker-php-ext-install pdo \
13
+ && docker-php-ext-install pdo_mysql \
14
+ && docker-php-ext-install opcache \
15
+ && apt-get clean
16
+ RUN adduser www-data root
17
+ RUN mkdir /db \
18
+ && chmod 777 /db
data/base/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'rb-inotify', require: false
7
+ gem 'rb-fsevent', require: false
8
+ gem 'guard'
9
+ gem 'guard-rspec'
10
+ gem 'rubocop'
11
+ gem 'guard-rubocop'
12
+ end
13
+
14
+ group :test do
15
+ gem 'rspec'
16
+ gem 'emojidex-vectors', github: 'emojidex/emojidex-vectors'
17
+ #gem 'emojidex-vectors', path: '../emojidex-vectors'
18
+ gem 'emojidex-rasters', github: 'emojidex/emojidex-rasters'
19
+ end
data/base/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require 'fileutils'
2
+
3
+ def rm_dbfile(profile)
4
+ puts "Deleting db/#{profile}/wordpress.sql"
5
+ FileUtils.rm("db/#{profile}/wordpress.sql") if File.exist?("db/#{profile}/wordpress.sql")
6
+ end
7
+
8
+ namespace :db do
9
+ namespace :dev do
10
+ desc 'Backup development container database to db/dev (container must be running)'
11
+ task :backup do
12
+ rm_dbfile('dev')
13
+ puts "Creating backup of development database..."
14
+ sh 'docker-compose exec db sh -c "exec mysqldump --single-transaction -hlocalhost -uroot -pwordpress wordpress > /db/wordpress.sql"'
15
+ end
16
+
17
+ desc 'Set the development container database image to the active image'
18
+ task :activate do
19
+ rm_dbfile('active')
20
+ FileUtils.cp('db/dev/wordpress.sql', 'db/active/wordpress.sql')
21
+ end
22
+ end
23
+
24
+ desc 'Backup and activate the development container database (container must be running)'
25
+ task :dev do
26
+ Rake::Task['db:dev:backup'].invoke
27
+ Rake::Task['db:dev:activate'].invoke
28
+ end
29
+
30
+ namespace :staging do
31
+ desc 'Set the staging database backup to the active database'
32
+ task :activate do
33
+ rm_dbfile('active')
34
+ FileUtils.cp('db/staging/wordpress.sql', 'db/active/wordpress.sql')
35
+ end
36
+ end
37
+
38
+ namespace :production do
39
+ desc 'Set the production database backup to the active database'
40
+ task :activate do
41
+ rm_dbfile('active')
42
+ FileUtils.cp('db/production/wordpress.sql', 'db/active/wordpress.sql')
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ require 'securerandom'
2
+ require 'yaml'
3
+
4
+ config_path = File.dirname(File.expand_path(File.dirname(__FILE__)))
5
+
6
+ if File.exist?("#{config_path}/salts.yml")
7
+ puts "Salts already generated! Refusing to overwrite them!"
8
+ else
9
+ salts = {
10
+ AUTH_KEY: SecureRandom.base64(24),
11
+ SECURE_AUTH_KEY: SecureRandom.base64(24),
12
+ LOGGED_IN_KEY: SecureRandom.base64(24),
13
+ NONCE_KEY: SecureRandom.base64(24),
14
+ AUTH_SALT: SecureRandom.base64(24),
15
+ SECURE_AUTH_SALT: SecureRandom.base64(24),
16
+ LOGGED_IN_SALT: SecureRandom.base64(24),
17
+ NONCE_SALT: SecureRandom.base64(24)
18
+ }
19
+
20
+ File.open("#{config_path}/salts.yml", 'w') {|f| f.write salts.to_yaml }
21
+ end
@@ -0,0 +1,18 @@
1
+ require 'erb'
2
+ require 'yaml'
3
+ require 'ostruct'
4
+
5
+ def GenerateWPConfig(profile = 'production', out_path = './')
6
+ require_relative 'gen-salts' # Generate salts if necessary
7
+
8
+ config_path = File.dirname(File.expand_path(File.dirname(__FILE__)))
9
+ vars = {}
10
+ vars[:profile] = profile.to_sym
11
+ vars[:db_info] = YAML.load_file("#{config_path}/database.yml")
12
+ vars[:salt] = YAML.load_file("#{config_path}/salts.yml")
13
+
14
+ erb_source = File.read("#{config_path}/deploy-tools/wp-config.php.erb")
15
+ rend = ERB.new(erb_source)
16
+ res = rend.result(OpenStruct.new(vars).instance_eval { binding })
17
+ File.write("#{out_path}/wp-config.php", res)
18
+ end
@@ -0,0 +1,97 @@
1
+ <?php
2
+ /**
3
+ * The base configuration for WordPress
4
+ *
5
+ * The wp-config.php creation script uses this file during the
6
+ * installation. You don't have to use the web site, you can
7
+ * copy this file to "wp-config.php" and fill in the values.
8
+ *
9
+ * This file contains the following configurations:
10
+ *
11
+ * * MySQL settings
12
+ * * Secret keys
13
+ * * Database table prefix
14
+ * * ABSPATH
15
+ *
16
+ * @link https://codex.wordpress.org/Editing_wp-config.php
17
+ *
18
+ * @package WordPress
19
+ */
20
+
21
+ // ** MySQL settings - You can get this info from your web host ** //
22
+ /** The name of the database for WordPress */
23
+ define('DB_NAME', '<%= db_info[profile]["database"] %>');
24
+
25
+ /** MySQL database username */
26
+ define('DB_USER', '<%= db_info[profile]["username"] %>');
27
+
28
+ /** MySQL database password */
29
+ define('DB_PASSWORD', '<%= db_info[profile]["password"] %>');
30
+
31
+ /** MySQL hostname */
32
+ define('DB_HOST', '<%= db_info[profile]["host"] %>');
33
+
34
+ /** Database Charset to use in creating database tables. */
35
+ define('DB_CHARSET', 'utf8');
36
+
37
+ /** The Database Collate type. Don't change this if in doubt. */
38
+ define('DB_COLLATE', '');
39
+
40
+ /**#@+
41
+ * Authentication Unique Keys and Salts.
42
+ *
43
+ * Change these to different unique phrases!
44
+ * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
45
+ * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
46
+ *
47
+ * @since 2.6.0
48
+ */
49
+ define('AUTH_KEY', '<%= salt[:AUTH_KEY] %>');
50
+ define('SECURE_AUTH_KEY', '<%= salt[:SECURE_AUTH_KEY] %>');
51
+ define('LOGGED_IN_KEY', '<%= salt[:LOGGED_IN_KEY] %>');
52
+ define('NONCE_KEY', '<%= salt[:NONCE_KEY] %>');
53
+ define('AUTH_SALT', '<%= salt[:AUTH_SALT] %>');
54
+ define('SECURE_AUTH_SALT', '<%= salt[:SECURE_AUTH_SALT] %>');
55
+ define('LOGGED_IN_SALT', '<%= salt[:LOGGED_IN_SALT] %>');
56
+ define('NONCE_SALT', '<%= salt[:NONCE_SALT] %>');
57
+
58
+ /**#@-*/
59
+
60
+ /**
61
+ * WordPress Database Table prefix.
62
+ *
63
+ * You can have multiple installations in one database if you give each
64
+ * a unique prefix. Only numbers, letters, and underscores please!
65
+ */
66
+ $table_prefix = 'wp_';
67
+
68
+ /**
69
+ * For developers: WordPress debugging mode.
70
+ *
71
+ * Change this to true to enable the display of notices during development.
72
+ * It is strongly recommended that plugin and theme developers use WP_DEBUG
73
+ * in their development environments.
74
+ *
75
+ * For information on other constants that can be used for debugging,
76
+ * visit the Codex.
77
+ *
78
+ * @link https://codex.wordpress.org/Debugging_in_WordPress
79
+ */
80
+ define('WP_DEBUG', false);
81
+
82
+ /* That's all, stop editing! Happy blogging. */
83
+
84
+ /** Absolute path to the WordPress directory. */
85
+ if ( !defined('ABSPATH') )
86
+ define('ABSPATH', dirname(__FILE__) . '/wordpress/');
87
+
88
+ define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
89
+ define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/wordpress');
90
+ define('WP_CONTENT_DIR', realpath(ABSPATH . '../../../current/public/wp-content/'));
91
+ define('WP_CONTENT_URL', WP_HOME . '/wp-content');
92
+ define('WP_TEMP_DIR', realpath(ABSPATH . '../../tmp/'));
93
+ define('FS_METHOD', 'direct');
94
+
95
+ /** Sets up WordPress vars and included files. */
96
+ require_once(ABSPATH . 'wp-settings.php');
97
+ add_filter('auto_update_theme', '__return_false');
@@ -0,0 +1,96 @@
1
+ <?php
2
+ /**
3
+ * The base configuration for WordPress
4
+ *
5
+ * The wp-config.php creation script uses this file during the
6
+ * installation. You don't have to use the web site, you can
7
+ * copy this file to "wp-config.php" and fill in the values.
8
+ *
9
+ * This file contains the following configurations:
10
+ *
11
+ * * MySQL settings
12
+ * * Secret keys
13
+ * * Database table prefix
14
+ * * ABSPATH
15
+ *
16
+ * @link https://codex.wordpress.org/Editing_wp-config.php
17
+ *
18
+ * @package WordPress
19
+ */
20
+
21
+ // ** MySQL settings - You can get this info from your web host ** //
22
+ /** The name of the database for WordPress */
23
+ define('DB_NAME', 'wordpress');
24
+
25
+ /** MySQL database username */
26
+ define('DB_USER', 'wordpress');
27
+
28
+ /** MySQL database password */
29
+ define('DB_PASSWORD', 'wordpress');
30
+
31
+ /** MySQL hostname */
32
+ define('DB_HOST', 'localhost');
33
+
34
+ /** Database Charset to use in creating database tables. */
35
+ define('DB_CHARSET', 'utf8');
36
+
37
+ /** The Database Collate type. Don't change this if in doubt. */
38
+ define('DB_COLLATE', '');
39
+
40
+ /**#@+
41
+ * Authentication Unique Keys and Salts.
42
+ *
43
+ * Change these to different unique phrases!
44
+ * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
45
+ * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
46
+ *
47
+ * @since 2.6.0
48
+ */
49
+ define('AUTH_KEY', 'put your unique phrase here');
50
+ define('SECURE_AUTH_KEY', 'put your unique phrase here');
51
+ define('LOGGED_IN_KEY', 'put your unique phrase here');
52
+ define('NONCE_KEY', 'put your unique phrase here');
53
+ define('AUTH_SALT', 'put your unique phrase here');
54
+ define('SECURE_AUTH_SALT', 'put your unique phrase here');
55
+ define('LOGGED_IN_SALT', 'put your unique phrase here');
56
+ define('NONCE_SALT', 'put your unique phrase here');
57
+
58
+ /**#@-*/
59
+
60
+ /**
61
+ * WordPress Database Table prefix.
62
+ *
63
+ * You can have multiple installations in one database if you give each
64
+ * a unique prefix. Only numbers, letters, and underscores please!
65
+ */
66
+ $table_prefix = 'wp_';
67
+
68
+ /**
69
+ * For developers: WordPress debugging mode.
70
+ *
71
+ * Change this to true to enable the display of notices during development.
72
+ * It is strongly recommended that plugin and theme developers use WP_DEBUG
73
+ * in their development environments.
74
+ *
75
+ * For information on other constants that can be used for debugging,
76
+ * visit the Codex.
77
+ *
78
+ * @link https://codex.wordpress.org/Debugging_in_WordPress
79
+ */
80
+ define('WP_DEBUG', false);
81
+
82
+ /* That's all, stop editing! Happy blogging. */
83
+
84
+ /** Absolute path to the WordPress directory. */
85
+ if ( !defined('ABSPATH') )
86
+ define('ABSPATH', dirname(__FILE__) . '/wordpress/');
87
+
88
+ define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
89
+ define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/wordpress');
90
+ define('WP_CONTENT_DIR', realpath(ABSPATH . '../wp-content/'));
91
+ define('WP_CONTENT_URL', WP_HOME . '/wp-content');
92
+ //define('WP_TEMP_DIR', realpath(ABSPATH . '../../tmp/'));
93
+ define('FS_METHOD', 'direct');
94
+
95
+ /** Sets up WordPress vars and included files. */
96
+ require_once(ABSPATH . 'wp-settings.php');
@@ -0,0 +1,9 @@
1
+ # config valid only for current version of Capistrano
2
+ lock "3.9.0"
3
+
4
+
5
+ require 'yaml'
6
+ opts = YAML.load_file('config/definitions.yml')
7
+
8
+ set :application, opts['app']['name']
9
+ set :repo_url, opts['app']['repo']
@@ -0,0 +1,130 @@
1
+ require 'yaml'
2
+
3
+ opts = YAML.load_file('config/definitions.yml')
4
+ db_info = YAML.load_file('config/database.yml')
5
+
6
+ deploy_user = opts['deployer']['user']
7
+ host_addr = opts['deployer']['host']['production']
8
+ multisite_root = opts['deployer']['root']
9
+ site_fqdn = opts['deployer']['fqdn']['production']
10
+
11
+ role :web, "#{deploy_user}@#{host_addr}"
12
+
13
+ set :tmp_dir, "#{multisite_root}/tmp"
14
+ deploy_path = "#{multisite_root}/#{site_fqdn}"
15
+
16
+ set :linked_dirs, %w{public/wp-content/uploads public/wordpress public/wp-content/upgrade public/wp-content/plugins tmp}
17
+ set :linked_files, %w{public/wp-config.php}
18
+
19
+ set :deploy_to, deploy_path
20
+
21
+ namespace :deploy do
22
+ desc "Generate wp-config.php for profile"
23
+ task :wp_config do
24
+ on roles(:web) do
25
+ invoke 'deploy:check:make_linked_dirs'
26
+ require_relative '../deploy-tools/gen-wp-config'
27
+ FileUtils.mkdir('./tmp') unless Dir.exist?('./tmp')
28
+ GenerateWPConfig('production', './tmp')
29
+ upload! './tmp/wp-config.php', "#{deploy_path}/shared/public/wp-config.php"
30
+ end
31
+ end
32
+
33
+ task :upload_wp do
34
+ on roles(:web) do
35
+ upload! './public/wordpress', "#{deploy_path}/shared/public/", recursive: true
36
+ end
37
+ end
38
+
39
+ task :sync_wp do
40
+ on roles(:web) do
41
+ `rsync -avzPhu --delete ./public/wordpress/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/wordpress/`
42
+ end
43
+ end
44
+
45
+ task :sync_content do
46
+ on roles(:web) do
47
+ `rsync -avzPhu --delete ./public/wp-content/uploads/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/wp-content/uploads/`
48
+ end
49
+ end
50
+
51
+ task :upload_content do
52
+ on roles(:web) do
53
+ upload! './public/wp-content/uploads', "#{deploy_path}/shared/public/wp-content/", recursive: true
54
+ end
55
+ end
56
+
57
+ task :sync_plugins do
58
+ on roles(:web) do
59
+ `rsync -avzPhu --delete ./public/wp-content/plugins/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/plugins/`
60
+ end
61
+ end
62
+
63
+ task :upload_plugins do
64
+ on roles(:web) do
65
+ upload! './public/wp-content/plugins', "#{deploy_path}/shared/public/", recursive: true
66
+ end
67
+ end
68
+
69
+ desc 'Preform special seed tasks required on intial seed'
70
+ task :initial do
71
+ on roles(:web) do
72
+ invoke('deploy:check:directories')
73
+ invoke('deploy:check:linked_dirs')
74
+ invoke('deploy:check:make_linked_dirs')
75
+ invoke('deploy:wp_config')
76
+ invoke('deploy:upload_wp')
77
+ invoke('deploy:upload_content')
78
+ invoke('deploy')
79
+ invoke('db:seed')
80
+ end
81
+ end
82
+ end
83
+
84
+ namespace :db do
85
+ desc "Backup DB"
86
+ task :backup do
87
+ on roles(:web) do
88
+ timestamp = DateTime.now
89
+ execute "mkdir -p #{deploy_path}/db/backups/production/"
90
+ execute "mysqldump --opt --user=#{db_info['production']['username']} --password=#{db_info['production']['password']} --host=#{db_info['production']['host']} #{db_info['production']['database']} > #{deploy_path}/db/backups/production/#{timestamp}.sql"
91
+ FileUtils.mkdir_p('./db/production') unless Dir.exist?('./db/production')
92
+ download! "#{deploy_path}/db/backups/production/#{timestamp}.sql", "db/production/wordpress.sql"
93
+ end
94
+ end
95
+
96
+ desc "Clear remote backup records"
97
+ task :clear_remote_backups do
98
+ on roles(:web) do
99
+ execute "rm #{deploy_path}/db/backups/production/*.sql"
100
+ end
101
+ end
102
+
103
+ desc 'Seed the "active" database'
104
+ task :seed do
105
+ on roles(:web) do
106
+ if File.exist? 'db/active/wordpress.sql'
107
+ execute "mkdir -p #{deploy_path}/db/"
108
+ upload! 'db/active/wordpress.sql', "#{deploy_path}/db/wordpress.sql"
109
+ execute "mysql -h#{db_info['production']['host']} -u#{db_info['production']['username']} -p#{db_info['production']['password']} #{db_info['production']['database']} < #{deploy_path}/db/wordpress.sql"
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ namespace :data do
116
+ desc "Backup data"
117
+ task :backup do
118
+ on roles(:web) do
119
+ download! "#{deploy_path}/shared/public/wp-content/uploads", "./public/wp-content/", recursive: true
120
+ download! "#{deploy_path}/shared/public/wp-content/plugins", "./public/wp-content/", recursive: true
121
+ download! "#{deploy_path}/shared/public/wp-content/upgrade", "./public/wp-content/", recursive: true
122
+ end
123
+ end
124
+ end
125
+
126
+ desc 'Backup DB and remote uploads/content'
127
+ task :backup do
128
+ invoke('db:backup')
129
+ invoke('data:backup')
130
+ end
@@ -0,0 +1,130 @@
1
+ require 'yaml'
2
+
3
+ opts = YAML.load_file('config/definitions.yml')
4
+ db_info = YAML.load_file('config/database.yml')
5
+
6
+ deploy_user = opts['deployer']['user']
7
+ host_addr = opts['deployer']['host']['staging']
8
+ multisite_root = opts['deployer']['root']
9
+ site_fqdn = opts['deployer']['fqdn']['staging']
10
+
11
+ role :web, "#{deploy_user}@#{host_addr}"
12
+
13
+ set :tmp_dir, "#{multisite_root}/tmp"
14
+ deploy_path = "#{multisite_root}/#{site_fqdn}"
15
+
16
+ set :linked_dirs, %w{public/wp-content/uploads public/wordpress public/wp-content/upgrade public/wp-content/plugins tmp}
17
+ set :linked_files, %w{public/wp-config.php}
18
+
19
+ set :deploy_to, deploy_path
20
+
21
+
22
+ namespace :deploy do
23
+ desc "Generate wp-config.php for profile"
24
+ task :wp_config do
25
+ on roles(:web) do
26
+ require_relative '../deploy-tools/gen-wp-config'
27
+ FileUtils.mkdir('./tmp') unless Dir.exist?('./tmp')
28
+ GenerateWPConfig('staging', './tmp')
29
+ upload! './tmp/wp-config.php', "#{deploy_path}/shared/public/wp-config.php"
30
+ end
31
+ end
32
+
33
+ task :upload_wp do
34
+ on roles(:web) do
35
+ upload! './public/wordpress', "#{deploy_path}/shared/public/", recursive: true
36
+ end
37
+ end
38
+
39
+ task :sync_wp do
40
+ on roles(:web) do
41
+ `rsync -avzPhu --delete ./public/wordpress/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/wordpress/`
42
+ end
43
+ end
44
+
45
+ task :sync_content do
46
+ on roles(:web) do
47
+ `rsync -avzPhu --delete ./public/wp-content/uploads/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/wp-content/uploads/`
48
+ end
49
+ end
50
+
51
+ task :upload_content do
52
+ on roles(:web) do
53
+ upload! './public/wp-content/uploads', "#{deploy_path}/shared/public/wp-content/", recursive: true
54
+ end
55
+ end
56
+
57
+ task :sync_plugins do
58
+ on roles(:web) do
59
+ `rsync -avzPhu --delete ./public/wp-content/plugins/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/plugins/`
60
+ end
61
+ end
62
+
63
+ task :upload_plugins do
64
+ on roles(:web) do
65
+ upload! './public/wp-content/plugins', "#{deploy_path}/shared/public/", recursive: true
66
+ end
67
+ end
68
+
69
+ desc 'Preform special seed tasks required on intial seed'
70
+ task :initial do
71
+ on roles(:web) do
72
+ invoke('deploy:check:directories')
73
+ invoke('deploy:check:linked_dirs')
74
+ invoke('deploy:check:make_linked_dirs')
75
+ invoke('deploy:wp_config')
76
+ invoke('deploy:upload_wp')
77
+ invoke('deploy:upload_content')
78
+ invoke('deploy')
79
+ invoke('db:seed')
80
+ end
81
+ end
82
+ end
83
+
84
+ namespace :db do
85
+ desc "Backup DB"
86
+ task :backup do
87
+ on roles(:web) do
88
+ timestamp = DateTime.now
89
+ execute "mkdir -p #{deploy_path}/db/backups/staging/"
90
+ execute "mysqldump --opt --user=#{db_info['staging']['username']} --password=#{db_info['staging']['password']} --host=#{db_info['staging']['host']} #{db_info['staging']['database']} > #{deploy_path}/db/backups/staging/#{timestamp}.sql"
91
+ FileUtils.mkdir_p('./db/staging') unless Dir.exist?('./db/staging')
92
+ download! "#{deploy_path}/db/backups/staging/#{timestamp}.sql", "db/staging/wordpress.sql"
93
+ end
94
+ end
95
+
96
+ desc "Clear remote backup records"
97
+ task :clear_remote_backups do
98
+ on roles(:web) do
99
+ execute "rm #{deploy_path}/db/backups/staging/*.sql"
100
+ end
101
+ end
102
+
103
+ desc 'Seed the "active" database'
104
+ task :seed do
105
+ on roles(:web) do
106
+ if File.exist? 'db/active/wordpress.sql'
107
+ execute "mkdir -p #{deploy_path}/db/"
108
+ upload! 'db/active/wordpress.sql', "#{deploy_path}/db/wordpress.sql"
109
+ execute "mysql -h#{db_info['staging']['host']} -u#{db_info['staging']['username']} -p#{db_info['staging']['password']} #{db_info['staging']['database']} < #{deploy_path}/db/wordpress.sql"
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ namespace :data do
116
+ desc "Backup data"
117
+ task :backup do
118
+ on roles(:web) do
119
+ download! "#{deploy_path}/shared/public/wp-content/uploads", "./public/wp-content/", recursive: true
120
+ download! "#{deploy_path}/shared/public/wp-content/plugins", "./public/wp-content/", recursive: true
121
+ download! "#{deploy_path}/shared/public/wp-content/upgrade", "./public/wp-content/", recursive: true
122
+ end
123
+ end
124
+ end
125
+
126
+ desc 'Backup DB and remote uploads/content'
127
+ task :backup do
128
+ invoke('db:backup')
129
+ invoke('data:backup')
130
+ end
@@ -0,0 +1,28 @@
1
+ version: '2'
2
+
3
+ services:
4
+ db:
5
+ image: mysql:5.7
6
+ volumes:
7
+ - "./db/dev:/db"
8
+ - "./db/active:/docker-entrypoint-initdb.d"
9
+ restart: always
10
+ environment:
11
+ MYSQL_ROOT_PASSWORD: wordpress
12
+ MYSQL_DATABASE: wordpress
13
+
14
+ web:
15
+ depends_on:
16
+ - db
17
+ build: .
18
+ volumes:
19
+ - "./public:/var/www/html"
20
+ ports:
21
+ - "8000:80"
22
+ restart: always
23
+ environment:
24
+ WORDPRESS_DB_HOST: db:3306
25
+ WORDPRESS_DB_PASSWORD: wordpress
26
+ volumes:
27
+ db_data:
28
+ driver: local
@@ -0,0 +1,96 @@
1
+ <?php
2
+ /**
3
+ * The base configuration for WordPress
4
+ *
5
+ * The wp-config.php creation script uses this file during the
6
+ * installation. You don't have to use the web site, you can
7
+ * copy this file to "wp-config.php" and fill in the values.
8
+ *
9
+ * This file contains the following configurations:
10
+ *
11
+ * * MySQL settings
12
+ * * Secret keys
13
+ * * Database table prefix
14
+ * * ABSPATH
15
+ *
16
+ * @link https://codex.wordpress.org/Editing_wp-config.php
17
+ *
18
+ * @package WordPress
19
+ */
20
+
21
+ // ** MySQL settings - You can get this info from your web host ** //
22
+ /** The name of the database for WordPress */
23
+ define('DB_NAME', 'wordpress');
24
+
25
+ /** MySQL database username */
26
+ define('DB_USER', 'root');
27
+
28
+ /** MySQL database password */
29
+ define('DB_PASSWORD', 'wordpress');
30
+
31
+ /** MySQL hostname */
32
+ define('DB_HOST', 'db');
33
+
34
+ /** Database Charset to use in creating database tables. */
35
+ define('DB_CHARSET', 'utf8');
36
+
37
+ /** The Database Collate type. Don't change this if in doubt. */
38
+ define('DB_COLLATE', '');
39
+
40
+ /**#@+
41
+ * Authentication Unique Keys and Salts.
42
+ *
43
+ * Change these to different unique phrases!
44
+ * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
45
+ * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
46
+ *
47
+ * @since 2.6.0
48
+ */
49
+ define('AUTH_KEY', 'put your unique phrase here');
50
+ define('SECURE_AUTH_KEY', 'put your unique phrase here');
51
+ define('LOGGED_IN_KEY', 'put your unique phrase here');
52
+ define('NONCE_KEY', 'put your unique phrase here');
53
+ define('AUTH_SALT', 'put your unique phrase here');
54
+ define('SECURE_AUTH_SALT', 'put your unique phrase here');
55
+ define('LOGGED_IN_SALT', 'put your unique phrase here');
56
+ define('NONCE_SALT', 'put your unique phrase here');
57
+
58
+ /**#@-*/
59
+
60
+ /**
61
+ * WordPress Database Table prefix.
62
+ *
63
+ * You can have multiple installations in one database if you give each
64
+ * a unique prefix. Only numbers, letters, and underscores please!
65
+ */
66
+ $table_prefix = 'wp_';
67
+
68
+ /**
69
+ * For developers: WordPress debugging mode.
70
+ *
71
+ * Change this to true to enable the display of notices during development.
72
+ * It is strongly recommended that plugin and theme developers use WP_DEBUG
73
+ * in their development environments.
74
+ *
75
+ * For information on other constants that can be used for debugging,
76
+ * visit the Codex.
77
+ *
78
+ * @link https://codex.wordpress.org/Debugging_in_WordPress
79
+ */
80
+ define('WP_DEBUG', false);
81
+
82
+ /* That's all, stop editing! Happy blogging. */
83
+
84
+ /** Absolute path to the WordPress directory. */
85
+ if ( !defined('ABSPATH') )
86
+ define('ABSPATH', dirname(__FILE__) . '/wordpress/');
87
+
88
+ define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
89
+ define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/wordpress');
90
+ define('WP_CONTENT_DIR', realpath(ABSPATH . '../wp-content/'));
91
+ define('WP_CONTENT_URL', WP_HOME . '/wp-content');
92
+ //define('WP_TEMP_DIR', realpath(ABSPATH . '../../tmp/'));
93
+ define('FS_METHOD', 'direct');
94
+
95
+ /** Sets up WordPress vars and included files. */
96
+ require_once(ABSPATH . 'wp-settings.php');
@@ -0,0 +1,32 @@
1
+ require_relative 'wslave_tools'
2
+
3
+ class WSlaveDocker
4
+ def initialize
5
+ puts 'Initializing WSlave Docker Control'
6
+ end
7
+
8
+ def server(force)
9
+ return unless _check()
10
+ _force_down() if force
11
+ WSlaveTools.set_dev_perms
12
+ `docker-compose up -d`
13
+ end
14
+
15
+ def stop(force, volume)
16
+ return unless _check()
17
+ _force_down() if force
18
+ `docker-compose down#{volume ? ' -v' : ''}`
19
+ end
20
+
21
+ def _check()
22
+ return true if (File.exist?("./config/.wslave") &&
23
+ File.exist?("Dockerfile") &&
24
+ File.exist?("docker-compose.yml"))
25
+ puts "This does not appear to be the root of a WSlave managed app."
26
+ false
27
+ end
28
+
29
+ def _force_down()
30
+ `docker-compose down --remove-orphans`
31
+ end
32
+ end
data/lib/wslave_new.rb ADDED
@@ -0,0 +1,36 @@
1
+ require 'fileutils'
2
+ require 'rubygems'
3
+ require_relative 'wslave_tools'
4
+
5
+ class WSlaveNew
6
+ def initialize(path, version)
7
+ puts '⚙ Initializing Toolchain・・・'
8
+
9
+ tc_path = File.expand_path "#{__dir__}/../base/"
10
+
11
+ FileUtils.mkdir_p path
12
+
13
+ Dir.chdir path
14
+
15
+ puts " > Setting up WordPress WSlave setup in: #{path}"
16
+ FileUtils.cp_r Dir.glob("#{tc_path}/*"), path
17
+
18
+ spec = Gem::Specification::load("#{__dir__}/../wslave.gemspec")
19
+ File.open("#{path}/config/.wslave", 'w') {|f| f.write(spec.version)}
20
+
21
+ `cd #{path} && git init && git add --all && git commit -am "initial commit by wslave"`
22
+
23
+ `cd #{path} && git submodule add git://github.com/WordPress/WordPress.git public/wordpress`
24
+ `cd #{path}/public/wordpress && git checkout #{version}-branch` if version != ''
25
+ `cd #{path} && git submodule update --init --recursive public/wordpress`
26
+ FileUtils.cp_r("#{path}/public/wordpress/wp-content", "#{path}/public/wp-content")
27
+ FileUtils.mkdir("#{path}/public/wordpress/wp-content/uploads")
28
+ FileUtils.touch("#{path}/public/wordpress/wp-content/uploads/.gitkeep")
29
+ FileUtils.mkdir("#{path}/public/wordpress/wp-content/upgrade")
30
+ FileUtils.touch("#{path}/public/wordpress/wp-content/upgrade/.gitkeep")
31
+ Dir.chdir path
32
+ WSlaveTools.set_dev_perms
33
+
34
+ `cd #{path} && git add --all && git commit -am "Add and initialize WordPress#{version}"`
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ class WSlaveSage
2
+ def initialize(name, version)
3
+ unless File.exist?("./config/.wslave")
4
+ puts "This command must be run in the root of a WSlave setup"
5
+ end
6
+
7
+ `cd public/wp-content/themes && composer create-project roots/sage #{name} #{version}`
8
+ end
9
+ end
@@ -0,0 +1,36 @@
1
+ require 'fileutils'
2
+
3
+ class WSlaveTools
4
+ def self.wslave_root?()
5
+ return true if (File.exist?("./config/.wslave") &&
6
+ File.exist?("Dockerfile") &&
7
+ File.exist?("docker-compose.yml"))
8
+ puts "This does not appear to be the root of a WSlave managed app."
9
+ puts "Run command again from the root directory of a WSlave app."
10
+ false
11
+ end
12
+
13
+ def self.set_dev_perms
14
+ begin
15
+ FileUtils.chown(nil, 'www-data', 'public/wp-content/themes')
16
+ FileUtils.chown(nil, 'www-data', 'public/wp-content/uploads')
17
+ FileUtils.chown(nil, 'www-data', 'public/wp-content/plugins')
18
+ FileUtils.chown(nil, 'www-data', 'public/wp-content/upgrade')
19
+ rescue Errno::EPERM
20
+ puts "!!!WARNING!!! Your user does not belong to the www-data group!\n" \
21
+ " >>> Unable to make folders writable for devlopment. <<<\n" \
22
+ " >>> You will not be able to edit files or themes in the WP dev container! <<<\n"
23
+ end
24
+ end
25
+
26
+ def self.update_submodules
27
+ `git submodule update --init --recursive`
28
+ end
29
+
30
+ def self.sync
31
+ if wslave_root?
32
+ update_submodules
33
+ set_dev_perms
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,16 @@
1
+ default: &default
2
+ adapter: mysql2
3
+ encoding: utf8
4
+ reconnect: false
5
+ pool: 5
6
+ username:
7
+ password:
8
+ host:
9
+
10
+ staging:
11
+ <<: *default
12
+ database: _staging
13
+
14
+ production:
15
+ <<: *default
16
+ database: _production
@@ -0,0 +1,12 @@
1
+ deployer:
2
+ user:
3
+ host:
4
+ staging:
5
+ production:
6
+ root:
7
+ fqdn:
8
+ staging:
9
+ production:
10
+ app:
11
+ name:
12
+ repo:
data/wslave.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'wslave'
3
+ s.version = '0.0.2'
4
+ s.licenses = ['GPL-3.0', 'AGPL-3.0']
5
+ s.summary = '"Word Slave" generates and controls a WordPress installation'
6
+ s.description = 'Word Slave includes the wslave command and a control library to generate a ' \
7
+ '"best practice" WordPress installation and includes a pre-rolled Docker ' \
8
+ 'setup for running a development server and a Capistrano setup for deployment.'
9
+ s.authors = ['Rei Kagetsuki']
10
+ s.email = 'info@phantom.industries'
11
+ s.homepage = 'https://github.com/PhantomCreation/wslave'
12
+
13
+ s.required_ruby_version = '>= 2.0.0'
14
+ s.files = Dir.glob('lib/**/*.rb') +
15
+ Dir.glob('bin/**/*.rb') +
16
+ Dir.glob('base/**/*') +
17
+ Dir.glob('templates/**/*') +
18
+ ['wslave.gemspec']
19
+ s.require_paths = ['lib']
20
+ s.bindir = 'bin'
21
+ s.executables << 'wslave'
22
+
23
+ s.add_dependency 'thor'
24
+ s.add_dependency 'haikunator'
25
+ s.add_dependency 'capistrano', '~> 3.8.1'
26
+ s.add_dependency 'capistrano-git-with-submodules', '~> 2.0'
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wslave
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rei Kagetsuki
@@ -75,7 +75,27 @@ executables:
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
+ - base/Capfile
79
+ - base/Dockerfile
80
+ - base/Gemfile
81
+ - base/Rakefile
82
+ - base/config/deploy-tools/gen-salts.rb
83
+ - base/config/deploy-tools/gen-wp-config.rb
84
+ - base/config/deploy-tools/wp-config.php.erb
85
+ - base/config/deploy-tools/wp-config.php.local
86
+ - base/config/deploy.rb
87
+ - base/config/deploy/production.rb
88
+ - base/config/deploy/staging.rb
89
+ - base/docker-compose.yml
90
+ - base/public/wp-config.php
78
91
  - bin/wslave
92
+ - lib/wslave_docker.rb
93
+ - lib/wslave_new.rb
94
+ - lib/wslave_sage.rb
95
+ - lib/wslave_tools.rb
96
+ - templates/config/database.yml
97
+ - templates/config/definitions.yml
98
+ - wslave.gemspec
79
99
  homepage: https://github.com/PhantomCreation/wslave
80
100
  licenses:
81
101
  - GPL-3.0