diff --git a/docker-compose.yml b/docker-compose.yml index 66ba8f34..1b99ba97 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,6 @@ services: volumes: - .:/app ports: - - '8080:80' + - '8080:8080' - '1337:1337' - '7900:7900' \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index 66f7fd3c..d160fcac 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,13 +1,27 @@ FROM selenium/node-chrome ENV SE_SCREEN_WIDTH 1850 -ENV G4F_LOGIN_URL http://localhost:7900/?autoconnect=1&resize=scale&password=secret ENV PYTHONUNBUFFERED 1 +ENV G4F_DIR /app +ENV G4F_LOGIN_URL http://localhost:7900/?autoconnect=1&resize=scale&password=secret ARG G4F_VERSION ENV G4F_VERSION ${G4F_VERSION} +ARG G4F_USER +ENV G4F_USER ${G4F_USER:-g4f} +ARG G4F_USER_ID +ENV G4F_USER_ID ${G4F_USER_ID:-1000} +ARG G4F_NO_GUI +ENV G4F_NO_GUI ${G4F_NO_GUI} +ENV HOME /home/$G4F_USER USER root +# If docker compose, install git +RUN if [ "$G4F_VERSION" = "" ] ; then \ + apt-get -qqy update && \ + apt-get -qqy install git \ + ; fi + # Python packages RUN apt-get -qqy update \ && apt-get -qqy install \ @@ -22,24 +36,32 @@ RUN rm -rf /var/lib/apt/lists/* /var/cache/apt/* \ # Update entrypoint COPY docker/supervisor.conf /etc/supervisor/conf.d/selenium.conf +COPY docker/supervisor-gui.conf /etc/supervisor/conf.d/gui.conf + +# If no gui +RUN if [ "$G4F_NO_GUI" ] ; then \ + rm /etc/supervisor/conf.d/gui.conf \ + ; fi # Change background image COPY docker/background.png /usr/share/images/fluxbox/ubuntu-light.png # Switch user -USER 1200 +RUN groupadd -g $G4F_USER_ID $G4F_USER +RUN useradd -rm -G sudo -u $G4F_USER_ID -g $G4F_USER_ID $G4F_USER +USER $G4F_USER_ID # Set the working directory in the container. -WORKDIR /app +WORKDIR $G4F_DIR # Copy the project's requirements file into the container. -COPY requirements.txt /app/ +COPY requirements.txt $G4F_DIR # Upgrade pip for the latest features and install the project's Python dependencies. RUN pip install --upgrade pip && pip install -r requirements.txt # Copy the entire package into the container. -COPY g4f /app/g4f +ADD --chown=$G4F_USER g4f $G4F_DIR/ # Expose ports -EXPOSE 80 1337 \ No newline at end of file +EXPOSE 8080 1337 \ No newline at end of file diff --git a/docker/supervisor-gui.conf b/docker/supervisor-gui.conf new file mode 100755 index 00000000..44273c67 --- /dev/null +++ b/docker/supervisor-gui.conf @@ -0,0 +1,12 @@ +[program:g4f-gui] +priority=15 +command=python -m g4f.cli gui +directory=/app +stopasgroup=true +autostart=true +autorestart=true + +;Logs (all Hub activity redirected to stdout so it can be seen through "docker logs" +redirect_stderr=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 \ No newline at end of file diff --git a/docker/supervisor.conf b/docker/supervisor.conf index e76f9a6c..f0f01fd1 100755 --- a/docker/supervisor.conf +++ b/docker/supervisor.conf @@ -57,19 +57,6 @@ stopasgroup=true autostart=true autorestart=true -;Logs (all Hub activity redirected to stdout so it can be seen through "docker logs" -redirect_stderr=true -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 - -[program:g4f-gui] -priority=15 -command=python -m g4f.cli gui -directory=/app -stopasgroup=true -autostart=true -autorestart=true - ;Logs (all Hub activity redirected to stdout so it can be seen through "docker logs" redirect_stderr=true stdout_logfile=/dev/stdout diff --git a/g4f/cli.py b/g4f/cli.py index 20131e5d..40ddd3d7 100644 --- a/g4f/cli.py +++ b/g4f/cli.py @@ -15,7 +15,7 @@ def main(): parser = argparse.ArgumentParser(description="Run gpt4free") subparsers = parser.add_subparsers(dest="mode", help="Mode to run the g4f in.") api_parser=subparsers.add_parser("api") - api_parser.add_argument("--bind", default="127.0.0.1:1337", help="The bind string.") + api_parser.add_argument("--bind", default="0.0.0.0:1337", help="The bind string.") api_parser.add_argument("--debug", type=bool, default=False, help="Enable verbose logging") api_parser.add_argument("--ignored-providers", nargs="+", choices=[provider.name for provider in IgnoredProviders], default=[], help="List of providers to ignore when processing request.") diff --git a/g4f/debug.py b/g4f/debug.py index 85009277..1ee1506f 100644 --- a/g4f/debug.py +++ b/g4f/debug.py @@ -1,6 +1,6 @@ from os import environ from requests import get -from importlib.metadata import version, PackageNotFoundError +from importlib.metadata import version as get_package_version, PackageNotFoundError from subprocess import check_output, CalledProcessError, PIPE from .errors import VersionNotFoundError @@ -10,7 +10,7 @@ version_check = True def get_version() -> str: # Read from package manager try: - return version("g4f") + return get_package_version("g4f") except PackageNotFoundError: pass # Read from docker environment @@ -33,7 +33,7 @@ def check_pypi_version() -> None: try: version = get_version() latest_version = get_lastet_version() + if version != latest_version: + print(f'New pypi version: {latest_version} (current: {version}) | pip install -U g4f') except Exception as e: - print(f'Failed to check g4f pypi version: {e}') - if version != latest_version: - print(f'New pypi version: {latest_version} (current: {version}) | pip install -U g4f') \ No newline at end of file + print(f'Failed to check g4f pypi version: {e}') \ No newline at end of file diff --git a/g4f/gui/run.py b/g4f/gui/run.py index 0f94814c..7ff769fd 100644 --- a/g4f/gui/run.py +++ b/g4f/gui/run.py @@ -6,7 +6,7 @@ from g4f.gui import run_gui def gui_parser(): parser = ArgumentParser(description="Run the GUI") parser.add_argument("-host", type=str, default="0.0.0.0", help="hostname") - parser.add_argument("-port", type=int, default=80, help="port") + parser.add_argument("-port", type=int, default=8080, help="port") parser.add_argument("-debug", action="store_true", help="debug mode") return parser