>백엔드 개발 >PHP 튜토리얼 >Docker_php 기술로 완전한 WordPress 사이트를 설정하는 방법에 대한 전체 가이드

Docker_php 기술로 완전한 WordPress 사이트를 설정하는 방법에 대한 전체 가이드

WBOY
WBOY원래의
2016-05-16 20:09:431143검색

1. 도커 설치

실제로 시작하기 전에 Linux 시스템에 Docker가 설치되어 있는지 확인해야 합니다. 우리가 사용하는 호스트는 CentOS 7이므로 다음 명령을 사용하여 yum 관리자를 사용하여 docker를 설치합니다.

  # yum install docker

201572995512549.png (684×490)

    # systemctl restart docker.service

2. 워드프레스 Dockerfile 생성

wordpress와 필수 구성 요소를 자동으로 설치하려면 Dockerfile을 만들어야 합니다. 이 Dockerfile은 WordPress 설치 이미지를 빌드하는 데 사용됩니다. 이 WordPress Dockerfile은 Docker Registry Hub에서 CentOS 7 이미지를 가져오고 사용 가능한 최신 업데이트로 시스템을 업그레이드합니다. 그런 다음 Nginx 웹 서버, PHP, MariaDB, Open SSH 서버 및 Docker 컨테이너의 올바른 작동에 필수적인 기타 구성 요소와 같은 필수 소프트웨어를 설치합니다. 마지막으로 WordPress 설치를 초기화하는 스크립트를 실행합니다.

  # nano Dockerfile

그런 다음 Dockerfile에 다음 구성 줄을 추가해야 합니다.

 FROM centos:centos7
  MAINTAINER The CentOS Project <cloud-ops@centos.org>
  RUN yum -y update; yum clean all
  RUN yum -y install epel-release; yum clean all
  RUN yum -y install mariadb mariadb-server mariadb-client nginx php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy php-apc pwgen python-setuptools curl git tar; yum clean all
  ADD ./start.sh /start.sh
  ADD ./nginx-site.conf /nginx.conf
  RUN mv /nginx.conf /etc/nginx/nginx.conf
  RUN rm -rf /usr/share/nginx/html/*
  RUN /usr/bin/easy_install supervisor
  RUN /usr/bin/easy_install supervisor-stdout
  ADD ./supervisord.conf /etc/supervisord.conf
  RUN echo %sudo ALL=NOPASSWD: ALL >> /etc/sudoers
  ADD http://wordpress.org/latest.tar.gz /wordpress.tar.gz
  RUN tar xvzf /wordpress.tar.gz
  RUN mv /wordpress/* /usr/share/nginx/html/.
  RUN chown -R apache:apache /usr/share/nginx/
  RUN chmod 755 /start.sh
  RUN mkdir /var/run/sshd
  EXPOSE 80
  EXPOSE 22
  CMD ["/bin/bash", "/start.sh"]

201572995556444.png (684×490)

3. 시작 스크립트 생성

Dockerfile을 생성한 후 WordPress 설치를 실행하고 구성하는 데 사용할 start.sh라는 스크립트를 생성해야 합니다. WordPress용 데이터베이스와 비밀번호를 생성하고 구성합니다. 즐겨 사용하는 텍스트 편집기로 start.sh를 엽니다.

  # nano start.sh

start.sh를 연 후 파일에 다음 구성 줄을 추가해야 합니다.

  #!/bin/bash
  __check() {
  if [ -f /usr/share/nginx/html/wp-config.php ]; then
  exit
  fi
  }
  __create_user() {
  # 创建用于 SSH 登录的用户
  SSH_USERPASS=`pwgen -c -n -1 8`
  useradd -G wheel user
  echo user:$SSH_USERPASS | chpasswd
  echo ssh user password: $SSH_USERPASS
  }
  __mysql_config() {
  # 启用并运行 MySQL
  yum -y erase mariadb mariadb-server
  rm -rf /var/lib/mysql/ /etc/my.cnf
  yum -y install mariadb mariadb-server
  mysql_install_db
  chown -R mysql:mysql /var/lib/mysql
  /usr/bin/mysqld_safe &
  sleep 10
  }
  __handle_passwords() {
  # 在这里我们生成随机密码(多亏了 pwgen)。前面两个用于 mysql 用户,最后一个用于 wp-config.php 的随机密钥。
  WORDPRESS_DB="wordpress"
  MYSQL_PASSWORD=`pwgen -c -n -1 12`
  WORDPRESS_PASSWORD=`pwgen -c -n -1 12`
  # 这是在日志中显示的密码。
  echo mysql root password: $MYSQL_PASSWORD
  echo wordpress password: $WORDPRESS_PASSWORD
  echo $MYSQL_PASSWORD > /mysql-root-pw.txt
  echo $WORDPRESS_PASSWORD > /wordpress-db-pw.txt
  # 这里原来是一个包括 sed、cat、pipe 和 stuff 的很长的行,但多亏了
  # @djfiander 的 https://gist.github.com/djfiander/6141138
  # 现在没有了
  sed -e "s/database_name_here/$WORDPRESS_DB/
  s/username_here/$WORDPRESS_DB/
  s/password_here/$WORDPRESS_PASSWORD/
  /'AUTH_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
  /'SECURE_AUTH_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
  /'LOGGED_IN_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
  /'NONCE_KEY'/s/put your unique phrase here/`pwgen -c -n -1 65`/
  /'AUTH_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/
  /'SECURE_AUTH_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/
  /'LOGGED_IN_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/
  /'NONCE_SALT'/s/put your unique phrase here/`pwgen -c -n -1 65`/" /usr/share/nginx/html/wp-config-sample.php > /usr/share/nginx/html/wp-config.php
  }
  __httpd_perms() {
  chown apache:apache /usr/share/nginx/html/wp-config.php
  }
  __start_mysql() {
  # systemctl 启动 mysqld 服务
  mysqladmin -u root password $MYSQL_PASSWORD
  mysql -uroot -p$MYSQL_PASSWORD -e "CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '$WORDPRESS_PASSWORD'; FLUSH PRIVILEGES;"
  killall mysqld
  sleep 10
  }
  __run_supervisor() {
  supervisord -n
  }
  # 调用所有函数
  __check
  __create_user
  __mysql_config
  __handle_passwords
  __httpd_perms
  __start_mysql
  __run_supervisor

201572995630747.png (684×490)

위 구성을 추가한 후 파일을 저장하고 닫습니다.
4. 구성 파일 생성

이제 nginx-site.conf라는 Nginx 웹 서버용 구성 파일을 생성해야 합니다.

  # nano nginx-site.conf

그런 다음 구성 파일에 다음 구성 정보를 추가합니다.

user nginx;
  worker_processes 1;
  error_log /var/log/nginx/error.log;
  #error_log /var/log/nginx/error.log notice;
  #error_log /var/log/nginx/error.log info;
  pid /run/nginx.pid;
  events {
  worker_connections 1024;
  }
  http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log /var/log/nginx/access.log main;
  sendfile on;
  #tcp_nopush on;
  #keepalive_timeout 0;
  keepalive_timeout 65;
  #gzip on;
  index index.html index.htm index.php;
  # Load modular configuration files from the /etc/nginx/conf.d directory.
  # See http://nginx.org/en/docs/ngx_core_module.html#include
  # for more information.
  include /etc/nginx/conf.d/*.conf;
  server {
  listen 80;
  server_name localhost;
  #charset koi8-r;
  #access_log logs/host.access.log main;
  root /usr/share/nginx/html;
  #error_page 404 /404.html;
  # redirect server error pages to the static page /50x.html
  #
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
  root html;
  }
  # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  #
  #location ~ \.php$ {
  # proxy_pass http://127.0.0.1;
  #}
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  location ~ \.php$ {
  root /usr/share/nginx/html;
  try_files $uri =404;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
  }
  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  #
  #location ~ /\.ht {
  # deny all;
  #}
  }
  }

201572995707457.png (684×490)

이제 supervisor.conf 파일을 생성하고 다음 줄을 추가합니다.

  # nano supervisord.conf

그런 다음 다음 줄을 추가하세요.

  [unix_http_server]
  file=/tmp/supervisor.sock ; (the path to the socket file)
  [supervisord]
  logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
  logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
  logfile_backups=10 ; (num of main logfile rotation backups;default 10)
  loglevel=info ; (log level;default info; others: debug,warn,trace)
  pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
  nodaemon=false ; (start in foreground if true;default false)
  minfds=1024 ; (min. avail startup file descriptors;default 1024)
  minprocs=200 ; (min. avail process descriptors;default 200)
  ; the below section must remain in the config file for RPC
  ; (supervisorctl/web interface) to work, additional interfaces may be
  ; added by defining them in separate rpcinterface: sections
  [rpcinterface:supervisor]
  supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
  [supervisorctl]
  serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
  [program:php-fpm]
  command=/usr/sbin/php-fpm -c /etc/php/fpm
  stdout_events_enabled=true
  stderr_events_enabled=true
  [program:php-fpm-log]
  command=tail -f /var/log/php-fpm/php-fpm.log
  stdout_events_enabled=true
  stderr_events_enabled=true
  [program:mysql]
  command=/usr/bin/mysql --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
  stdout_events_enabled=true
  stderr_events_enabled=true
  [program:nginx]
  command=/usr/sbin/nginx
  stdout_events_enabled=true
  stderr_events_enabled=true
  [eventlistener:stdout]
  command = supervisor_stdout
  buffer_size = 100
  events = PROCESS_LOG
  result_handler = supervisor_stdout:event_handler

201572995736091.png (684×490)

추가 후 파일을 저장하고 닫습니다.
5. WordPress 컨테이너 구축

이제 구성 파일과 스크립트 생성을 완료한 후 마침내 Dockerfile을 사용하여 최신 WordPress CMS(번역자 주: 콘텐츠 관리 시스템, 콘텐츠 관리 시스템)를 설치하는 데 필요한 컨테이너를 만들고 다음 지침에 따라 구성해야 합니다. 구성 파일 . 이를 위해서는 해당 디렉터리에서 다음 명령을 실행해야 합니다.

  # docker build --rm -t wordpress:centos7 .

201572995803992.png (684×490)

6. WordPress 컨테이너 실행

이제 다음 명령을 실행하여 새로 빌드된 컨테이너를 실행하고 Nginx 웹 서버 및 SSH 액세스를 위해 해당 포트 88 및 22를 엽니다.

  # CID=$(docker run -d -p 80:80 wordpress:centos7)

201572995845827.png (593×38)

다음 명령어를 실행하면 컨테이너 내부에서 실행되는 프로세스와 명령어를 확인할 수 있습니다.

 # echo "$(docker logs $CID )"

다음 명령을 실행하여 포트 매핑이 올바른지 확인하세요.

  # docker ps


201572995909669.png (631×104)

7. 웹 인터페이스

마지막으로 모든 것이 순조롭게 진행되면 브라우저로 http://ip-address/ 또는 http://mywebsite.com/을 열면 WordPress 환영 인터페이스가 표시됩니다.

201572995934305.png (1380×722)

이제 웹 인터페이스를 통해 WordPress 패널의 WordPress 구성, 사용자 이름 및 비밀번호를 설정하겠습니다.

201572995957637.png (1380×722)

그런 다음 위의 사용자 이름과 비밀번호를 WordPress 로그인 인터페이스에 입력하세요.

2015729100028673.png (1380×722)

요약

CentOS 7을 docker OS로 사용하여 LEMP 스택에서 WordPress CMS를 성공적으로 구축하고 실행했습니다. 보안 관점에서 볼 때 컨테이너에서 WordPress를 실행하는 것이 호스트 시스템에 대해 더 안전하고 안정적입니다. 이 게시물은 Docker 컨테이너에서 실행되는 Nginx 웹 서버에서 WordPress를 사용하기 위한 전체 구성을 다룹니다. 질문, 제안, 피드백이 있는 경우 아래 댓글 상자에 적어주시면 콘텐츠를 개선하고 업데이트할 수 있습니다. 매우 감사합니다! 즐겨보세요 :-)

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.