1. 项目概述在香港地区的服务器上部署Laravel应用是一个常见的开发需求特别是对于需要面向亚太地区用户的服务。CentOS 7作为稳定可靠的Linux发行版配合Docker容器化技术能够为Laravel应用提供高效的运行环境。本教程将详细讲解从零开始搭建LaravelMySQL服务的完整流程。注意本教程假设您已经拥有一台运行CentOS 7的香港服务器并具备基本的Linux命令行操作能力。2. 环境准备与基础配置2.1 系统更新与基础工具安装首先登录您的CentOS 7服务器执行以下命令更新系统并安装必要工具sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2这些工具是后续安装Docker所必需的依赖项。更新系统可以确保所有软件包都是最新版本减少潜在的兼容性问题。2.2 Docker安装与配置在CentOS 7上安装Docker的推荐方式是使用官方仓库sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io安装完成后启动Docker服务并设置为开机自启sudo systemctl start docker sudo systemctl enable docker验证Docker是否安装成功sudo docker --version2.3 Docker Compose安装Docker Compose是管理多容器应用的重要工具安装方法如下sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose验证安装docker-compose --version3. Laravel项目准备3.1 创建Laravel项目在服务器上创建项目目录并初始化Laravel项目mkdir ~/laravel-project cd ~/laravel-project curl -s https://laravel.build/example-app | bash这个命令会创建一个名为example-app的新Laravel项目。如果您已有现有项目可以直接将项目文件上传到这个目录。3.2 配置项目环境编辑项目根目录下的.env文件配置数据库连接等关键参数APP_NAMELaravel APP_ENVproduction APP_KEYbase64:... APP_DEBUGfalse APP_URLhttp://your-domain.com DB_CONNECTIONmysql DB_HOSTmysql DB_PORT3306 DB_DATABASElaravel DB_USERNAMEroot DB_PASSWORDyour_secure_password重要提示生产环境中务必设置APP_DEBUGfalse并确保APP_KEY已生成。4. Docker Compose配置4.1 编写docker-compose.yml在项目根目录创建docker-compose.yml文件内容如下version: 3.8 services: app: build: context: . dockerfile: Dockerfile image: laravel-app container_name: laravel-app restart: unless-stopped working_dir: /var/www/html volumes: - .:/var/www/html environment: - DB_HOSTmysql - DB_PORT3306 depends_on: - mysql networks: - laravel-network mysql: image: mysql:5.7 container_name: mysql restart: unless-stopped environment: MYSQL_DATABASE: laravel MYSQL_ROOT_PASSWORD: your_secure_password volumes: - mysql-data:/var/lib/mysql networks: - laravel-network nginx: image: nginx:alpine container_name: nginx restart: unless-stopped ports: - 80:80 - 443:443 volumes: - .:/var/www/html - ./nginx/conf.d:/etc/nginx/conf.d depends_on: - app networks: - laravel-network volumes: mysql-data: driver: local networks: laravel-network: driver: bridge4.2 创建Dockerfile在项目根目录创建Dockerfile内容如下FROM php:8.0-fpm-alpine WORKDIR /var/www/html RUN apk add --no-cache \ freetype \ libpng \ libjpeg-turbo \ freetype-dev \ libpng-dev \ libjpeg-turbo-dev \ libzip-dev \ zip \ unzip \ git \ docker-php-ext-configure gd --with-freetype --with-jpeg \ docker-php-ext-install -j$(nproc) gd pdo pdo_mysql zip \ apk del --no-cache freetype-dev libpng-dev libjpeg-turbo-dev RUN curl -sS https://getcomposer.org/installer | php -- --install-dir/usr/local/bin --filenamecomposer COPY . . RUN composer install --no-interaction --optimize-autoloader --no-dev RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache4.3 配置Nginx创建nginx配置文件目录和文件mkdir -p nginx/conf.d创建nginx/conf.d/app.conf文件内容如下server { listen 80; index index.php index.html; server_name your-domain.com; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/html/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri 404; fastcgi_split_path_info ^(.\.php)(/.)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }5. 部署与启动5.1 构建并启动容器在项目根目录执行以下命令docker-compose up -d --build这个命令会构建自定义的PHP-FPM镜像拉取MySQL和Nginx官方镜像创建网络和卷启动所有服务5.2 初始化数据库执行数据库迁移和种子docker-compose exec app php artisan migrate --seed5.3 优化应用性能执行以下优化命令docker-compose exec app php artisan config:cache docker-compose exec app php artisan route:cache docker-compose exec app php artisan view:cache6. 常见问题与解决方案6.1 权限问题如果遇到文件权限问题可以执行docker-compose exec app chown -R www-data:www-data storage bootstrap/cache6.2 数据库连接失败检查MySQL容器是否正常运行docker-compose logs mysql确保.env文件中的数据库配置与docker-compose.yml中的一致。6.3 Nginx 502 Bad Gateway检查PHP-FPM服务是否正常运行docker-compose exec app php-fpm -t查看Nginx错误日志docker-compose logs nginx7. 安全加固建议7.1 防火墙配置配置服务器防火墙仅开放必要端口sudo firewall-cmd --permanent --add-port80/tcp sudo firewall-cmd --permanent --add-port443/tcp sudo firewall-cmd --reload7.2 数据库安全建议修改MySQL root密码并创建专用应用用户docker-compose exec mysql mysql -uroot -p在MySQL命令行中ALTER USER root% IDENTIFIED BY new_secure_password; CREATE USER appuser% IDENTIFIED BY app_password; GRANT ALL PRIVILEGES ON laravel.* TO appuser%; FLUSH PRIVILEGES;然后更新.env文件中的数据库凭据。7.3 HTTPS配置为生产环境配置SSL证书可以使用Lets Encrypt免费证书docker-compose stop nginx sudo certbot certonly --standalone -d your-domain.com然后更新nginx配置使用SSL证书。8. 维护与监控8.1 日志查看查看容器日志docker-compose logs -f查看特定服务日志docker-compose logs -f app docker-compose logs -f mysql docker-compose logs -f nginx8.2 备份策略定期备份数据库docker-compose exec mysql sh -c exec mysqldump --all-databases -uroot -p$MYSQL_ROOT_PASSWORD backup.sql备份应用代码和上传文件tar -czvf laravel-backup.tar.gz ~/laravel-project8.3 性能监控安装监控工具docker run -d --nameportainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer然后通过浏览器访问服务器IP:9000来管理Docker容器。9. 更新与升级9.1 应用更新当Laravel应用代码更新时git pull origin master docker-compose exec app composer install docker-compose exec app php artisan migrate docker-compose exec app php artisan cache:clear9.2 容器重建当Dockerfile或docker-compose.yml有修改时docker-compose up -d --build9.3 服务重启重启所有服务docker-compose restart重启特定服务docker-compose restart app10. 实际部署经验分享在香港服务器部署Laravel应用时网络延迟通常比内地服务器更低但也要注意以下几点选择靠近主要用户群体的服务器机房位置监控服务器到数据库的网络延迟配置适当的缓存策略减少数据库查询使用CDN加速静态资源加载定期检查服务器与容器的资源使用情况对于高流量应用可以考虑增加Nginx和PHP-FPM容器实例数量配置MySQL主从复制使用Redis缓存会话和数据实现负载均衡提示香港服务器通常提供国际带宽优势适合服务亚太地区用户但也要注意合规性和数据安全要求。