#!/bin/sh set -e _docker_dir="$_docker_base_dir/$_remote_host" _ssh_cmd="ssh root@$_remote_host.$_domain" _scp_to_base="root@$_remote_host.$_domain:$_docker_dir" echo "HOST=$_remote_host" > .env echo "DOMAIN=$_domain" >> .env echo "MYSQL_ROOT_PASSWD=$_mysql_root_passwd" >> .env echo "MYSQL_DATABASE=wordpress" >> .env echo "MYSQL_USER=wordpress" >> .env echo "MYSQL_PASSWORD=wordpress" >> .env $_ssh_cmd "mkdir -p $_docker_dir/wordpress" echo "Copying files ..." scp -r production/config "$_scp_to_base"/config scp production/docker/Dockerfile "$_scp_to_base"/Dockerfile scp production/docker/entrypoint.sh "$_scp_to_base"/entrypoint.sh scp .env "$_scp_to_base"/.env scp production/docker/docker-compose.yml "$_scp_to_base"/docker-compose.yml scp wordpress.tar.gz "$_scp_to_base"/wordpress.tar.gz $_ssh_cmd "tar -xf $_docker_dir/wordpress.tar.gz -C $_docker_dir/wordpress && rm $_docker_dir/wordpress.tar.gz" echo "Configuring files ..." $_ssh_cmd "sed -i 's/__HOST__/$_remote_host/g' $_docker_dir/config/nginx.conf" # TODO make this more robust than just substituting localhost $_ssh_cmd "sed -i 's/localhost/$_remote_host-mysql/g' $_docker_dir/wordpress/wp-config.php" $_ssh_cmd "cat $_docker_dir/config/wp-config-forward-headers.php $_docker_dir/wordpress/wp-config.php >/tmp/out.tmp && mv /tmp/out.tmp $_docker_dir/wordpress/wp-config.php" $_ssh_cmd "chown -R $_docker_user: $_docker_dir" # The 82 comes from the Dockerfile addgroup and adduser commands $_ssh_cmd "chown -R 82:82 $_docker_dir/wordpress" echo "Starting containers ..." $_ssh_cmd "cd $_docker_dir && docker-compose up -d --build" # TODO - need to wait for mysql to initialise # temporary solution echo "waiting for mysql to initialise ..." sleep 10 echo "still waiting for mysql ..." sleep 10 echo "and still waiting for mysql ..." sleep 5 echo "Configuring WordPress ..." # TODO does docker always assign ips in range 172.% ???? # TODO - sort this mess out - use functions or something _ssh_shell_cmd='echo "GRANT ALL PRIVILEGES ON wordpress."*" TO \"wordpress\"@\"172.%\" IDENTIFIED BY \"'"$_wp_db_passwd"'\";" | mysql -uroot -p'"$_mysql_root_passwd" _cmd_docker_exec="cd $_docker_dir && docker exec -t $_remote_host-mysql /bin/sh -c '$_ssh_shell_cmd'" echo "$_ssh_cmd $_cmd_docker_exec" $_ssh_cmd $_cmd_docker_exec _cmd_wp="wp db import --dbuser=wordpress --dbpass=$_wp_db_passwd data.sql && rm data.sql" _cmd_docker_exec="cd $_docker_dir && docker exec -t $_remote_host-wordpress /bin/sh -c '$_cmd_wp'" echo "$_ssh_cmd $_cmd_docker_exec" $_ssh_cmd "$_cmd_docker_exec" _cmd_wp="wp rewrite structure /%postname%/" _cmd_docker_exec="cd $_docker_dir && docker exec -t $_remote_host-wordpress /bin/sh -c '$_cmd_wp'" echo "$_ssh_cmd $_cmd_docker_exec" $_ssh_cmd "$_cmd_docker_exec" # _cmd_wp="wp user create $_wp_admin_user" # _cmd_docker_exec="cd $_docker_dir && docker exec -t $_remote_host-wordpress /bin/sh -c '$_cmd_wp'" # echo "$_ssh_cmd $_cmd_docker_exec" # $_ssh_cmd "$_cmd_docker_exec" # TODO move this into helper script # wp search-replace 'example.dev' 'example.com' --skip-columns=guid # Or, if you only want to change the option, you can do: # wp option update home 'http://example.com' # wp option update siteurl 'http://example.com'; _cmd_wp="wp search-replace 'http://$_local_hostname.$_local_domain' 'https://$_local_hostname.$_local_domain' --skip-columns=guid" _cmd_docker_exec="cd $_docker_dir && docker exec -t $_remote_host-wordpress /bin/sh -c '$_cmd_wp'" echo "$_ssh_cmd $_cmd_docker_exec" $_ssh_cmd "$_cmd_docker_exec" _remote_url="$_remote_host.$_domain" _cmd_wp="wp search-replace '$_local_hostname.$_local_domain' '$_remote_url' --skip-columns=guid" _cmd_docker_exec="cd $_docker_dir && docker exec -t $_remote_host-wordpress /bin/sh -c '$_cmd_wp'" echo "$_ssh_cmd $_cmd_docker_exec" $_ssh_cmd "$_cmd_docker_exec" echo "" echo "-------------------------------------------------------------------------" echo "Deploy complete" echo " URL: https://$_remote_url/wp-login.php" rm .env