我选的是centos7服务器,然后nginx,mysql,redis这些依赖我一开始是网上搜索用命令行安装的,折腾了很久各种问题,最后选择了用宝塔面板去安装,解决了安装过程出现的一些问题。
然后是选择了用docker部署,项目部署在docker容器,mysql则部署在宿主机上。
然后遇到的一个问题数据库连不上的问题,因为项目是在容器里,mysql在外面,所以不能使用localhost的办法去连。mysql的host需要填写宿主机的ip,如下图我所圈中的那个ip,然后还要设置允许访问
这样就能连上数据库了。
这是dockerfile
FROM centos:7
# install yum-utils
RUN yum -y install yum-utils
# install libevent
RUN yum -y install libevent libevent-devel
# install php8.1 libs
RUN yum -y install epel-release
RUN yum -y install https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
RUN yum-config-manager --enable remi-php81
RUN yum -y install php-cli php-event php-posix php-pcntl php-zip php-openssl php-devel php-gd php-mbstring php-curl php-xml php-simplexml php-fileinfo php-sodium php-pear php-bcmath php-json php-mysqlnd php-redis php-amqp php-imagick --skip-broken
# copy project
RUN mkdir /app
COPY ./ /app
RUN chmod -R 777 /app/public /app/runtime
# install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
RUN composer install --no-dev --working-dir=/app
# clean all
RUN yum clean all
ENTRYPOINT ["php", "/app/start.php", "start"]
这是build命令
# -e HOST_IP=$(ip addr show eth0 | awk '/inet / {print $2}' | cut -d '/' -f 1) 这句是将宿主机的 IP 地址作为 HOST_IP 环境变量传递给容器
docker run -d --restart=always --name=app -p 8787:8787 -e HOST_IP=$(ip addr show eth0 | awk '/inet / {print $2}' | cut -d '/' -f 1) developer/app:1.0