05月15日, 2021 717 views

发现个网站fly.io,网站宣称可以部署各种服务在上面~从doc得知部署还算简单,只需在相应的源码目录内配置fly.toml即可。当然,你也可以通过容器方式进行部署。本文将着重介绍通过容器这种方式部署的具体过程~
21/12/24 更新了PHP版本到8.0,nginx到1.12.0.修改php-fpm为unix监听。需要注意,最新版本OneManager-php后台多了个强制https,注意不要开启,开启会循环302!
网站注册地址https://web.fly.io/app/sign-up 注册很简单,只需一个邮箱即可~当然直接通过GitHub登录也是可以的~注册后会提示绑定信用卡才可使用(Error We need your payment information to continue! Add a credit card or buy credit)(银联卡也可以拿来验证233).免费额度足够搭个小网站耍耍了~注意不要使用永久存储卷,那个是要花钱的!
(每月gon160G出站流量,8,436,960秒CPU时长,还有独立的ipv4和无限个ipv6地址,真的挺良心的)

安装很简单,以下是他们官网提供的脚本
macOS
brew install superfly/tap/flyctl
或者
curl -L https://fly.io/install.sh | sh
Linux
curl -L https://fly.io/install.sh | sh
Windows power shell
iwr https://fly.io/install.ps1 -useb | iex
安装完成后运行以下命令
flyctl auth login
flyctl会唤醒系统浏览器,直接登录等待授权即可~
接下来的核心就是这个部署app了!官方的套路是先创建fly app,然后检查通过后flyctl deploy部署之~所以按照官网的套路,我们来试着部署个应用试试看!
由于容器内保存的数据重启后会丢失的缘故,建个博客啥的有点不现实。。。永久卷还要花钱,所以我选择部署OneManager-php,折腾了N天,终于可以拿出个“还能用”的解决方案!有更好解决方案的欢迎留言!
以下是Dockerfile,在原作者基础上做了一点改动
FROM alpine:3.14 LABEL Maintainer="Tim de Pater <[email protected]>" LABEL Description="Lightweight container with Nginx 1.20 & PHP 8.0 based on Alpine Linux." # Install packages and remove default server definition RUN apk --no-cache add \ curl \ git\ nginx \ php8 \ php8-ctype \ php8-curl \ php8-dom \ php8-fpm \ php8-gd \ php8-intl \ php8-json \ php8-mbstring \ php8-mysqli \ php8-opcache \ php8-openssl \ php8-phar \ php8-session \ php8-xml \ php8-xmlreader \ php8-zlib \ supervisor # Create symlink so programs depending on `php` still function RUN ln -s /usr/bin/php8 /usr/bin/php # Configure nginx COPY config/nginx.conf /etc/nginx/nginx.conf COPY docker-entrypoint.sh /var/docker-entrypoint.sh # Configure PHP-FPM COPY config/fpm-pool.conf /etc/php8/php-fpm.d/www.conf COPY config/php.ini /etc/php8/conf.d/custom.ini # Configure supervisord COPY config/supervisord.conf /etc/supervisor/conf.d/supervisord.conf # Setup document root RUN mkdir -p /var/www/html # Make sure files/folders needed by the processes are accessable when they run under the nobody user RUN chown -R nobody.nobody /var/www/html && \ chmod +x /var/docker-entrypoint.sh && \ chown -R nobody.nobody /run && \ chown -R nobody.nobody /var/lib/nginx && \ chown -R nobody.nobody /var/log/nginx # Switch to use a non-root user from here on USER nobody # Add application WORKDIR /var/www/html RUN git clone https://github.com/qkqpttgf/OneManager-php.git /var/www/html/ && \ rm /var/www/html/.data/config.php &&\ chown -R nobody.nobody /var/www/html # Expose the port nginx is reachable on EXPOSE 8080 # Let supervisord start nginx & php-fpm ENTRYPOINT /var/docker-entrypoint.sh # Configure a healthcheck to validate that everything is up&running
docker-entrypoint.sh
#!/usr/bin/env sh echo $CONFIG|base64 -d > /var/www/html/.data/config.php chmod 666 /var/www/html/.data/config.php /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fly.toml
app = "自行修改"
[[services]]
internal_port = 8080
protocol = "tcp"
[services.concurrency]
hard_limit = 25
soft_limit = 20
[[services.ports]]
handlers = ["http"]
port = "80"
[[services.ports]]
handlers = ["tls", "http"]
port = "443"其中关键的config.php配置文件代码我用base64转义过,可以将代码排版整合成一个整体!好在平台对secrets长度没做过多限制,这样就能实现重启不丢失配置文件了!而且安全性会好很多
fly secrets set CONFIG="base64加密后的配置代码" -a 你的app名称
需要一提的是,OneManager-php的 config.php需要独立的vps或虚拟主机配置成功后提取,理论上进入部署成功且设置完成后的容器内部提取也可以,奈何不知如何做,也就作罢。。
其余的配置文件文末我会打包放上来,需要的可以下载自行修改。demo地址 戳我跳转
参考链接 https://github.com/TrafeX/docker-php-nginx
如非特别注明,转载可随意~注意留个链接。万分感谢