summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker-compose.yml2
-rw-r--r--docker/Dockerfile34
-rwxr-xr-xdocker/supervisor-gui.conf12
-rwxr-xr-xdocker/supervisor.conf13
-rw-r--r--g4f/cli.py2
-rw-r--r--g4f/debug.py10
-rw-r--r--g4f/gui/run.py2
7 files changed, 48 insertions, 27 deletions
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
@@ -60,17 +60,4 @@ 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
stdout_logfile_maxbytes=0 \ No newline at end of file
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